import axios from "axios";
import { Toast } from "@nutui/nutui";
import STATUS from "@/enum/STATUS.js";

// const aNotLoginPage = ["/login"];
// const loginPage = "/login";

// axios#request(config)
// axios#get(url[, config])
// axios#delete(url[, config])
// axios#head(url[, config])
// axios#options(url[, config])
// axios#post(url[, data[, config]])
// axios#put(url[, data[, config]])
// axios#patch(url[, data[, config]])

axios.interceptors.request.use(
  function(resp) {
    // let isLogin = resp.headers.isLogin === undefined ? true : resp.headers.isLogin;
    let isLogin = resp.headers.isLogin !== false;
    let sid = sessionStorage.getItem("sid")
      ? JSON.parse(sessionStorage.getItem("sid"))
      : {};

    // 没有登陆-跳到登陆页面
    // if (isLogin && !sid.access_token) {
    //   location.replace(sessionStorage.getItem("logoutURL"));
    //   return;
    // }
    if (isLogin) {
      resp.headers["Authorization"] = "bearer " + sid.access_token;
      delete resp.headers.isLogin;
    }
    return resp;
  },
  function(error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);
axios.interceptors.response.use(
  function(resp) {
    let respData = resp.data || {};
    let errLv = respData.errLv || 3; // 1是登录提示、2是token失效、3是token过期、大于3是其他
    // let sid = sessionStorage.getItem("sid");

    switch (respData.code) {
      case STATUS.identity_error[0]: // 没登陆
        if (errLv >= 1) {
          Toast.fail(respData.msg || STATUS.identity_error[1], {
            onClose: () => {
              sessionStorage.clear();
              location.replace("/");
            }
          });
          break;
        } else {
          return resp;
        }
      case STATUS.token_error[0]: // token错误
        if (errLv >= 2) {
          Toast.fail(respData.msg || STATUS.token_error[1], {
            onClose: () => {
              sessionStorage.clear();
              location.replace("/");
            }
          });
          break;
        } else {
          return resp;
        }
      // 过期
      case STATUS.token_overdue[0]:
        if (errLv >= 3) {
          Toast.fail(respData.msg || STATUS.token_overdue[1], {
            onClose: () => {
              sessionStorage.clear();
              location.replace("/");
            }
          });
        }
        break;
      default:
        return resp;
    }

    // 对响应数据做点什么
  },
  function(error) {
    // Message("服务器或网络出现问题");
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);
export default axios;
